Pythonクイズ#2 – all (not so) True
この記事はクイズのように使ってください。最初は問題を読んで解答を想像してみてください、その後に解答と説明も用意しています。
今週はall関数についての記事です。all関数にiterable(list, tupleなど)を渡してboolが返されます。全ての値はTrueに評価されたらallもTrueを返して、1つ以上の値がFalseになったらallはFalseを返します。
>>> all([True, True, True]) True >>> all([True, False, True]) False
問題:出力はなんでしょうか?
>>> all([]) #1 >>> all([[]]) #2 >>> all([[[]]]) #3
解答
#1 True
#2 False
#3 True
説明
allのコードは以下のようにです
def all(iterable): for element in iterable: if not element: return False return True
#1 iterableは空っぽの場合、forに入らず、直ぐTrueを返します。
#2 iterableには空っぽリストが入っていたらforのif not elementはTrueになって、return Falseが実行されます。
#3 iterableに[[]]が入っています。Pythonでlistの長さは1以上の場合、boolの評価はTrueになります。if not elementはFalseなので、forから出てTrueを返します。
>>> if []: ... print('empty list') ... >>> if [[]]: ... print('list with 1 value (empty list)') list with 1 value (empty list)
注意
allへ渡す値に気を付けてください